import { useAuth } from './auth'

export default {
    install(app) {
        const { checkAuth, isInTabbar } = useAuth()

        // 页面级别的权限拦截,不在show当中判断就是不需要进入页面之前，就可以判断跳转。onShow只在底部菜单栏的时候判断。这是优化的一部分。
        // 如果没有token,不需要进入跳转页面，直接拦截进入登录页面
        // 登录后，根据checkAuth传递的url参数，返回来源页。
        const interceptors = ['navigateTo', 'redirectTo', 'reLaunch']
        interceptors.forEach((api) => {
            uni.addInterceptor(api, {
                invoke(e) {
                    return checkAuth(e.url)
                },
            })
        })

        // 进入页面之后，由于addInterceptor监听不到switchTab, 没有token需要跳转登录页面
        app.mixin({
            onShow() {
                const pages = getCurrentPages()
                const currentPage = pages.length > 0 ? `/${pages[pages.length - 1].route}` : 'N/A'
                if (isInTabbar(currentPage)) {
                    checkAuth(currentPage)
                }
            },
        })
    },
}
